package com.daokin.filter;

import com.daokin.constant.SystemConstant;
import com.daokin.dto.User;
import com.daokin.util.HttpUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 */
@Component
public class GlobalInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        response.setHeader("Cache-Control", "public");
        response.setDateHeader("Expires", 86400);
        if (null == modelAndView) {
            return;
        }
        User currentUser = (User) request.getSession().getAttribute(SystemConstant.SESSION_USER_KEY);
        // System paramters
        String basePath = HttpUtils.getBasePath(request);
        String contextPath = HttpUtils.getContextPath(request);
        modelAndView.addObject("basePath", basePath);
        modelAndView.addObject("contextPath", contextPath);
        modelAndView.addObject("currentUser", currentUser);

        //Get sidebarClosed attribute from session, to fix the sidebar flesh issue
        int sidebarClosed = 0;
        if (request.getSession().getAttribute(SystemConstant.SESSION_SIDEBAR_CLOSED) != null) {
            sidebarClosed = Integer.parseInt(request.getSession().getAttribute(SystemConstant.SESSION_SIDEBAR_CLOSED).toString());
        }
        modelAndView.addObject("sidebarClosed", sidebarClosed);
        MDC.put("ip", HttpUtils.getIp(request));
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

    }

}
